//并发线程库

#include <iostream>
#include <thread>
#include <chrono>

//this_thread是一个在全局的命名空间，里面包含get_id, yield, sleep_until, sleep_for函数
//yield:主动让出线程的执行权
//sleep_until && sleep_for: 线程休眠,until休眠绝对时间,for休眠相对时间


//chrono即是头文件，也是std命名空间下的一个子命名空间(chrono is the name of a header, but also of a sub-namespace)

void Fun(int n1, int n2)
{
	std::cout << n1 << " " << n2 << std::endl;
}

int main()
{
	std::thread t1(Fun,1, 2);
	std::thread t2(Fun,10,20);

	t1.join();
	t2.join();

	for (int i = 0; i <= 10; i++)
	{
		std::cout << i << std::endl;

		//this_thread是一个命名空间其中的函数在头文件thread中, 使用函数的时候要配套使用std::chorno的函数
		
		//sleep_for函数的使用: 后面接一段时间std::chrono::seconds(),std::chron::hours()......
		std::this_thread::sleep_for(std::chrono::seconds(1));
		std::this_thread::sleep_for(std::chrono::hours(1));

		//sleep_until函数的使用: 
		{
			using namespace std::chrono;
			// 获取当前时间点，当你不知道一个变量的类型的时候，用auto！！！！！！！！！！
			
			//system_clock是一个类，now()是一个静态成员函数。(静态成员函数可以通过 类名::函数名来进行访问)
			auto wake_time = std::chrono::system_clock::now() + std::chrono::hours(1);
			std::this_thread::sleep_until(wake_time);  // 休眠1小时
		}
	}
	return 0;
}